VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "ClsMov"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Option Explicit

Public WithEvents orset As ClsRecordset
Attribute orset.VB_VarHelpID = -1

Public Event DataChanged()

Public codigo As String
Public codNodo As String
Public codCuenta As String
Public codMoneda As String
Public codCliente As String
Public codFactura As String

Public fecha As String
Public tipoComprobante As String
Public nroComprobante As String
Public cantidad As Integer
Public debeHaber As String
Public monto As Double
Public concepto As String
Public observaciones As String
Public cancelado As Boolean

'para los cargos y/o abonos en facturacion
Public detalles As ClsDetalle
Public servicio As ClsServicio

Private Sub Class_Initialize()
    Set orset = New ClsRecordset
    orset.setCampos dbCampos(tra)
    orset.setTablas Array(tra)
End Sub
Private Sub Class_Terminate()
    Set orset = Nothing
End Sub

Public Sub consulta()
    orset.consulta
End Sub
Public Sub consultaDatos(codig As String)
    orset.consulta Array(tra_id & "='" & codig & "'")
End Sub
Public Sub consultaCargosAbonosAsociadosXCliente(clienteCod As String)
    orset.consultaGral , Array(tra, cue, ser), _
                       Array(tra_cli_id & "='" & clienteCod & "'", _
                             tra_cue_id & "=" & cue_id, _
                             cue_ser_id & "=" & ser_id, _
                             ser_tse_id & "=1")
End Sub
'METODOS DE CONSULTA
Public Sub consultaXFactura(facturaCod As String, tipoTransaccionCod As String)
    'consulta los cargos y abonos generados con una factura
    orset.consultaGral , Array(tra, cue), _
                       Array(tra_cue_id & "=" & cue_id, _
                             tra_fac_id & "='" & facturaCod & "'", _
                             cue_tpt_id & "=" & tipoTransaccionCod)
End Sub
Public Sub consultaNoAbonadasCliente(clicod As String, Optional serCod As String)
    'consulta los cargos no abonados de un cliente y servicio
    Dim condiciones As Variant
    condiciones = Array(tra_cue_id & "=" & cue_id, _
                        cue_tpt_id & "=3", _
                        tra_cancelado & "=0", _
                        tra_cli_id & "='" & clicod & "'")
    If serCod <> "" Then
        condiciones = concatenaVectores(condiciones, Array(cue_ser_id & "=" & serCod))
    End If
    orset.consultaGral , Array(tra, cue), _
                       condiciones, _
                   Array(tra_fecha, tra_nro_comprobante, cue_tpt_id & " DESC")
    
End Sub
Public Function consultaVentaServicioDetalle(clicod As String, serCod As String, detCod As String)
    'consulta la cantidad de registros de detalles por Cliente/Servicio/Detalle --> se usa para saber si se ha registrado una venta para este detalle
    orset.consultaGral Array("count(*) as cuenta"), Array(cue, tra, tdt), _
                       Array(tdt_tra_id & "=" & tra_id, _
                             tra_cue_id & "=" & cue_id, _
                             cue_ser_id & "=" & serCod, _
                             tra_cli_id & "='" & clicod & "'", _
                             tdt_dta_id & "=" & detCod), , False
    consultaVentaServicioDetalle = orset.getDato("cuenta", 0)
    orset.CierraRec
End Function
Public Function cuentaNoPagadasClienteServicio(serCod, clicod)
    'consulta el total de cargos y abonos no cancelados
    orset.consultaGral Array("sum(" & tra_cantidad & ") as suma"), Array(tra, cue), _
                       Array(tra_cue_id & "=" & cue_id, _
                             tra_cancelado & "=0", _
                             cue_ser_id & "=" & serCod, _
                             tra_cli_id & "='" & clicod & "'"), , False
    cuentaNoPagadasClienteServicio = orset.getDato("suma", 0)
    orset.CierraRec
End Function
Public Sub buscar(numeroComprobante As String, servicioCod As String, fechaComp As String)
    'busca un registro por numero de comprobante/servicio/fecha
    orset.consultaGral Array(tra_cue_id & "=" & cue_id, _
                             cue_ser_id & "=" & servicioCod, _
                             tra_nro_comprobante & "='" & numeroComprobante & "'", _
                             tra_fecha & "='" & fechaComp & "'")
End Sub
Public Sub consultaXFacturaNumeroYAutorizacion(optFacNumero As String, optFacAutorizacion As String, Optional tipoMovCod As String = "")
    'consulta x NumeroFactura/NumeroAutorizacion/TipoMovimiento
    'se usa para buscar la factura en gestiones anteriores
    Dim condics As Variant
    condics = Array(tra_cue_id & "=" & cue_id, _
                    tra_fac_id & "=" & fac_id, _
                    fac_numero & "='" & optFacNumero & "'", _
                    fac_nroautorizacion & "='" & optFacAutorizacion & "'")
    If tipoMovCod <> "" Then
        condics = concatenaVectores(condics, Array(cue_tpt_id & "=" & tipoMovCod))
    End If
    orset.consultaGral , Array(fac, tra, cue), condics
End Sub

Public Sub consultaCargosXCobrar(clienteCod As String, tipoServicioCod As String)
    'TODO: corregir para que ordene por numero de detalles
    orset.consultaGral , Array(tra, cue, ser, dta, tdt), _
                       Array(tra_cue_id & "=" & cue_id, _
                             cue_ser_id & "=" & ser_id, _
                             tdt_tra_id & "=" & tra_id, _
                             tdt_dta_id & "=" & dta_id, _
                             tra_cancelado & "=" & formatBoolBD("0"), _
                             cue_tpt_id & "=1", _
                             tra_cli_id & "='" & clienteCod & "'", _
                             ser_tse_id & "=" & tipoServicioCod), Array(dta_numero & " DESC")
End Sub

Public Sub consultaVentasXDocumento(documentoCod As String)
    orset.consultaGral , Array(tra, trd, cue), _
                       Array(trd_tra_id & "=" & tra_id, _
                             trd_doc_id & "='" & documentoCod & "'", _
                             tra_cue_id & "=" & cue_id, _
                             cue_tpt_id & "=1")
End Sub

Public Sub consultaFacturasXDocumento(documentoCod As String)
    orset.consultaGral , Array(tra, trd, cue), _
                       Array(trd_tra_id & "=" & tra_id, _
                             trd_doc_id & "='" & documentoCod & "'", _
                             tra_cue_id & "=" & cue_id, _
                             cue_tpt_id & "=2")
End Sub

Public Function consultaVentaDeServicio(cliCodig As String, serCodig As String)
    orset.consultaGral , Array(tra, cue), _
                       Array(tra_cue_id & "=" & cue_id, _
                             cue_ser_id & "=" & serCodig, _
                             tra_cli_id & "='" & cliCodig & "'", _
                             cue_tpt_id & "=1")
    consultaVentaDeServicio = Me.codigo
End Function

Public Sub consultaCargos(abonoCod)
    'consulta los cargos de un abono especifico
    orset.consultaGral , Array(tra, mca), _
                       Array(mca_tra_car_id & "=" & tra_id, _
                             mca_tra_abo_id & "='" & abonoCod & "'")
End Sub
Public Sub consultaAbonos(cargoCod)
    'consulta los abonos de un cargo especifico
    orset.consultaGral , Array(tra, mca), _
                       Array(mca_tra_abo_id & "=" & tra_id, _
                             mca_tra_car_id & "='" & cargoCod & "'")
End Sub

Public Sub Cancelar(codMovim As String)
    'coloca a un registro como cancelado
    orset.sUpdateGral Array(tra_cancelado), _
                      Array("1"), _
                      Array(tra), _
                      Array(tra_id & "='" & codMovim & "'"), False
End Sub
Public Sub PorCobrar(codMovim As String)
    'coloca a un registro por cobrar
    orset.sUpdateGral Array(tra_cancelado), _
                      Array("0"), _
                      Array(tra), _
                      Array(tra_id & "='" & codMovim & "'"), False
End Sub
'OTROS METODOS DE INSERT PARA TABLAS DETALLE
Public Sub AgregaCargo(codMovim As String)
    'agrega un cargo a este abono
    orset.sInsertGral Array(mca_tra_car_id, mca_tra_abo_id), _
                      Array(codMovim, Me.codigo), _
                      Array(mca), False, False
End Sub
Public Sub AgregaAbono(codMovim As String)
    'agrega un abono a este cargo
    orset.sInsertGral Array(mca_tra_car_id, mca_tra_abo_id), _
                      Array(Me.codigo, codMovim), _
                      Array(mca), False, False
End Sub
Public Sub AgregaDetalle(CodDet As String)
    'agrega un detalle para los cargos
    orset.sInsertGral Array(tdt_tra_id, tdt_dta_id), _
                      Array(Me.codigo, CodDet), _
                      Array(tdt), False, False
End Sub

Public Sub eliminaInscritos()
    orset.sDeleteGral Array(tin), _
                      Array(tin_tra_id & "='" & Me.codigo & "'")
End Sub

Public Sub consultaDetalles()
    Set detalles = New ClsDetalle
    detalles.consultaDeMov Me.codigo
End Sub
Public Sub consultaDetallesDeServicio()
    Set detalles = New ClsDetalle
    Dim cuenta As ClsCuenta
    Set cuenta = New ClsCuenta
    cuenta.consultaDatos Me.codCuenta
    detalles.consultaServicio cuenta.codServicio
End Sub

'METODOS GENERICOS
Public Sub Reload_members()
    With orset
        codigo = .getDato(tra_id)
        codNodo = .getDato(tra_nod_id)
        codCuenta = .getDato(tra_cue_id)
        codMoneda = .getDato(tra_mon_id)
        codCliente = .getDato(tra_cli_id)
        codFactura = .getDato(tra_fac_id)
        fecha = .getDato(tra_fecha)
        tipoComprobante = .getDato(tra_tipo_comprobante)
        nroComprobante = .getDato(tra_nro_comprobante)
        cantidad = .getDato(tra_cantidad)
        monto = .getDato(tra_monto)
        concepto = .getDato(tra_concepto)
        observaciones = .getDato(tra_observaciones)
        cancelado = .getDato(tra_cancelado)
    End With
    RaiseEvent DataChanged
End Sub

Public Sub Nuevo(newNodId As String, newCueId As String, newMonId As String, newCliId As String, newFacId As String, newFecha As String, newTipoComprobante As String, newNroComprobante As String, newCantidad As String, newMonto As String, newConcepto As String, newObservaciones As String, newCancelado As String)
    orset.sInsert Array("", newNodId, newCueId, newMonId, newCliId, newFacId, _
                        newFecha, newTipoComprobante, aumentaCeros(newNroComprobante, 10), newCantidad, newMonto, _
                        UCase(newConcepto), UCase(newObservaciones), formatBoolBD(newCancelado))
End Sub
Public Sub Modificar(codig As String, newNodId As String, newCueId As String, newMonId As String, newCliId As String, newFacId As String, newFecha As String, newTipoComprobante As String, newNroComprobante As String, newCantidad As String, newMonto As String, newConcepto As String, newObservaciones As String, newCancelado As String)
    orset.sUpdate Array(codig, newNodId, newCueId, newMonId, newCliId, newFacId, _
                        newFecha, newTipoComprobante, aumentaCeros(newNroComprobante, 10), newCantidad, newMonto, _
                        UCase(newConcepto), UCase(newObservaciones), formatBoolBD(newCancelado))
End Sub
Public Sub Borrar(codig As String)
    orset.sDelete Array(tra_id & "='" & codig & "'")
End Sub
Private Sub orset_DataChanged()
    Reload_members
End Sub
